iT邦幫忙

1

Github Actions SSH CD

  • 分享至 

  • xImage
  •  

前言

讓遠端伺服器( ex: GCE)在本機修改 push 上 github 後,可以自動 git pull 更新。
本篇實作皆參考官方文件

步驟

1. 建立 github 專案,產生 action 範本,接著 git clone 至本機端和遠端

  • 專案開 public,clone 若用

    1. https
      
      在遠端伺服器設 git config --global user.email "xxxx@example.com", git config --global user.name "xxxxxx"
    2. ssh
      
      在遠端伺服器產生 ssh-keygen -t rsa -b 4096 -C "xxxx@example.com",再將 public key 設定在專案下的 Deploy Keys 中。 參考
  • 若還沒使用過 Action 可以先參考這篇

2. 開啟一個 GCE

3. 從本機端 ssh 連線到 GCE

* 測試用自動產生的 ssh key 連線: `ssh -i ~/.ssh/google_compute_engine xxxxxxx@xx.xx.xxx.xx` 確定 key 可以用

4. 將 key 加密

  1. 用 gpg 加密 gpg --symmetric --cipher-algo AES256 ~/.ssh/google_compute_engine
  2. 輸入 passphrase (test)
  3. 將加密後的 key 複製到專案底下 mv ~/.ssh/google_compute_engine.gpg ~/xxx/xxx/google_compute_engine.gpg
  4. git push 上 Github

5. 修改 Actions 腳本(.github/workflows/main.yml)

主要跑四個項目:

  1. decrypt:取出在 github secrets 設定的 PASSPHRASE 參數來解密,並寫入 $HOME/secrets/key
  2. test printing:印出第一項目寫入的 $HOME/secrets/key
  3. chom:更改權限,以符合私鑰權限
  4. ssh: 連線至遠端並下指令 git pull

ssh參數可參考這裏

name: CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Run a one-line script
      run: echo Hello, world!
    - name: decrypt
      run: |
        mkdir $HOME/secrets
        gpg --quiet --batch --yes --decrypt --passphrase="$PASSPHRASE" \
        --output $HOME/secrets/key google_compute_engine.gpg
      env:
        PASSPHRASE: ${{ secrets.PASSPHRASE }}
    - name: test key
      run: ls $HOME/secrets/key
    - name: chmod
      run: chmod 600 $HOME/secrets/key
    - name: ssh
      run: ssh -o StrictHostKeyChecking=no -i $HOME/secrets/key sarahcheng@35.229.180.75 "cd action_ci/;git pull"  
# cd action_ci 要改成自己的 guthub 專案名稱

Job: 由 Step 所組成,每個 Job 皆在新的執行個體 (instance) 中執行。Job 可以同時執行,亦可取決於先前的 Job 狀態依序執行。

  1. git push 上 Github

6. 到 github settings 頁面設定 secrets

7. 新增一個 file 並 push,最後到遠端查看

OK

感謝我大 TTN 協助!!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言